package com.scut.graduation.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import com.scut.graduation.util.R;



/**
 * @ControllerAdvice的三个作用 1.全局异常处理 重要 2.全局数据绑定 3.全局数据预处理
 */
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    // 自定义异常处理
    @ExceptionHandler(GraduationManagementException.class) // 指定出现什么异常执行这个方法
    public R handleBigFileUploadException(GraduationManagementException e) {
        // 记录错误日志
        log.error(ExceptionUtils.getMessage(e));
        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());
    }

    @ExceptionHandler(Exception.class) // 指定出现什么异常执行这个方法
    public R handleException(Exception e) {
        log.error(ExceptionUtils.getMessage(e));
        e.printStackTrace();
        return R.error().message("执行了全局异常处理handleException");
    }

    @ExceptionHandler(ArithmeticException.class) // 指定出现什么异常执行这个方法
    public R handleArithmeticException(ArithmeticException e) {
        log.error(ExceptionUtils.getMessage(e));
        e.printStackTrace();
        return R.error().message("执行了全局异常处理handleArithmeticException");
    }

    @ExceptionHandler(NullPointerException.class) // 指定出现什么异常执行这个方法
    public R handleNullPointerException(NullPointerException e) {
        log.error(ExceptionUtils.getMessage(e));
        e.printStackTrace();
        return R.error().message("执行了全局异常处理handleNullPointerException,空指针异常");
    }

}
